import { getLocale } from 'umi';
import * as defaultDictionaryConfig from './dictionary.config';

// const isProd = process.env.ENV === 'production';

// 检查枚举的配置是否包含多语言, 约定: 如果有多语言默认有 'zh-CN' 的配置
const checkHasLanguageData = dictGroupData =>
    Object.keys(dictGroupData).filter(item => item === 'zh-CN' || item === 'en-US').length > 0;

/**
 * 创建枚举数据对象
 *
 * const [list, getDictText] = createDictionary('CARE_TYPE_MAP');
 * const [list, getDictText] = createDictionary({...}, {lang: 'en-US', valueKey: 'value', textKey: 'text'});
 * console.log('================>careTypeDict', list);
 * console.log('================>careTypeDict', getDictText(1));
 *
 * @param targetDict
 * @param config
 */
export function createDictionary(targetDict, config = {}) {
    let dictGroupData;
    let langDictData = null;
    const { valueKey = 'value', textKey = 'text', dictionaryConfig = defaultDictionaryConfig } = config;
    let { lang } = config;
    // 多语言判断
    if (!lang) {
        lang = getLocale();
    }
    //
    if (typeof targetDict === 'string') {
        dictGroupData = dictionaryConfig[targetDict];
    } else if (targetDict instanceof Object) {
        dictGroupData = { ...targetDict };
    } else {
        dictGroupData = {};
    }
    // 约定的枚举值是包含语言分组的. 但是要做兼容处理
    if (!dictGroupData) {
        langDictData = {};
    } else if (dictGroupData) {
        if (checkHasLanguageData(dictGroupData)) {
            // 保证至少一定有 zh-CN 的配置
            langDictData = dictGroupData[lang];
            // 如果这个语言下面没有值, 就取中文的配置
            if (!langDictData) {
                langDictData = dictGroupData['zh-CN'];
            }
        } else {
            // 没有多语言配置, 直接取默认值
            langDictData = dictGroupData;
        }
    }
    const list = Object.keys(langDictData)?.map(key => ({
        [valueKey]: /^[0-9]+$/.test(key) ? Number(key) : key,
        [textKey]: langDictData[key]
    }));
    const getDictText = value => langDictData[value] || '';

    return [list, getDictText];
}
